/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.citas.bean;

import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.EtiquetasUtil;
import com.nys.conci.base.utilitario.FechaUtil;
import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.citas.entidad.ControlCita;
import com.nys.conci.citas.modelo.ModeloCitas;
import com.nys.conci.citas.servicio.ServicioControlCitas;
import com.nys.conci.cliente.entidad.Pago;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.cliente.entidad.PlanPago;
import com.nys.conci.usuario.servicio.ServicioAdministracion;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import org.primefaces.context.DefaultRequestContext;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Yeudy10
 */
@ManagedBean
@ViewScoped
public class BeanPagoCitas extends BeanBase {

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioControlCitas scc;
    @Inject
    private ServicioAdministracion sa;
    private List<ModeloCitas> listado_modelo_citas;
    private List<Persona> listado_persona_cliente;
    private Persona persona_cliente_tabla;
    private Persona persona_cliente_select;
    private ModeloCitas modelo_citas_tabla;
    private ModeloCitas modelo_citas_select;
    private String identificacion_c;
    private String dsc_cliente;
    private String dsc_estado;
    private String dsc_plan;
    private String dsc_especialidad;
    private String tipo_pago;
    private BigDecimal monto;
    private boolean modificar;
    private boolean habilitar;
    private boolean ocultar;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanPagoCitas() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            ocultar = false;
            habilitar = false;
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
        cargarClientes();
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public void cargarClientes() {
        try {
            listado_persona_cliente = new ArrayList<Persona>();
            listado_persona_cliente = scu.consultarPersonasCitas("C");
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarCitas() {
        try {
            listado_modelo_citas = new ArrayList<ModeloCitas>();
            List<ControlCita> lista = new ArrayList<ControlCita>();
            lista = scc.consultarListaCitasId(identificacion_c);
            for (ControlCita controlCita : lista) {
                ModeloCitas modelo = new ModeloCitas();
                modelo.setDscEstado(sa.consultarEstadoCita(controlCita.getId_estado_cita()).getNombre());
                modelo.setDscEspecialidad(sa.consultarEspecialidad(controlCita.getId_especialidad()).getNombre());
                modelo.setId_especialidad(controlCita.getId_especialidad());
                modelo.setFechareal(controlCita.getFechareal());
                modelo.setHora(controlCita.getHora());
                modelo.setId_estado_cita(controlCita.getId_estado_cita());
                modelo.setId_plan_cliente(controlCita.getId_plan_cliente());
                modelo.setIdentificacion_c(controlCita.getIdentificacion_c());
                modelo.setIdentificacion_u(controlCita.getIdentificacion_u());
                modelo.setId_cita(controlCita.getId_cita());
                modelo.setEstado_pago(controlCita.getEstado_pago());
                modelo.setNotificada(controlCita.getNotificada());
                modelo.setDiagnostico(controlCita.getDiagnostico());

                if (controlCita.getId_plan_cliente() != null && controlCita.getId_plan_cliente() != 0) {
                    modelo.setDscPlan(scc.consultarPlanPagoCliente(controlCita.getId_plan_cliente()).getNombre());
                }
                if (modelo.getEstado_pago() != null && modelo.getEstado_pago().equals("P")) {
                    modelo.setDscEstadoPago("Pagada");
                }
                Persona per_c = scu.consultarPersona(controlCita.getIdentificacion_c());
                if (per_c != null) {
                    modelo.setNombre_cliente(per_c.getNombre() + " " + per_c.getApellido1() + " " + per_c.getApellido2());
                }
                Persona per_u = scu.consultarPersona(controlCita.getIdentificacion_u());
                if (per_u != null) {
                    modelo.setNombre_usuario(per_u.getNombre() + " " + per_u.getApellido1() + " " + per_u.getApellido2());
                }

                listado_modelo_citas.add(modelo);
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void pagarCita() {
        try {
            if (validarPago()) {

                modelo_citas_select.setEstado_pago("P");
                scc.guardarCita(modelo_citas_select.toControlCitas(), true);
                Pago pago = new Pago();
                pago.setFecha(FechaUtil.obtenerFechaActualDB());
                pago.setId_cita(modelo_citas_select.getId_cita());
                pago.setId_especialidad(modelo_citas_select.getId_especialidad());
                pago.setIdentificacion(modelo_citas_select.getIdentificacion_c());
                pago.setId_plan_pago(modelo_citas_select.getId_plan_cliente());
                pago.setMonto(monto);
                pago.setTipo_pago(tipo_pago);
                sa.guardar(pago);                                
                imprimirRecibo();                
                cargarCitas();
                limpiarpago();
                String mensaje = "La cita seleccionada ha sido pagada";
                MensajeUtil.agregarMensajeInfo(mensaje);

            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void imprimirRecibo() {

        String dsc = "";
        if (tipo_pago.equals("E")) {
            dsc = "Efectivo";
        }
        if (tipo_pago.equals("T")) {
            dsc = "Tarjeta";
        }
        if (tipo_pago.equals("C")) {
            dsc = "Cheque";
        }

        RequestContext requestContext = new DefaultRequestContext();
        String java_script = "javascript:window.open('pago_impresion.xhtml?pFecha=" + FechaUtil.obtenerFechaActualDB()
                + "&pHora=" + FechaUtil.obtenerHoraDB()
                + "&pCliente=" + modelo_citas_select.getNombre_cliente()
                + "&pCedula=" + modelo_citas_select.getIdentificacion_c()
                + "&pMonto=" + monto
                + "&pMoneda=" + "Colones"
                + "&pConcepto=" + modelo_citas_select.getDscEspecialidad()
                + "&pTipo=" + dsc
                + "', '_blank', 'width=10, height=10, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no')";
        requestContext.execute(java_script);
    }

    public boolean validarPago() {
        boolean resultado = true;
        try {
            if (modelo_citas_select.getEstado_pago() != null && modelo_citas_select.getEstado_pago().equals("P")) {
                String mensaje = "La cita seleccionada YA fue pagada";
                MensajeUtil.agregarMensajeAdvertencia(mensaje);
                resultado = false;
            }
            if (monto == null || monto.equals(BigDecimal.ZERO)) {
                String mensaje = EtiquetasUtil.obtenerEtiqueta("campo.requerido.parametro", "Monto");
                MensajeUtil.agregarMensajeErrorComponente("form_conci:id_monto", mensaje);
                resultado = false;
            }

            if (tipo_pago == null || tipo_pago.isEmpty()) {
                String mensaje = EtiquetasUtil.obtenerEtiqueta("campo.requerido.parametro", "Tipo pago");
                MensajeUtil.agregarMensajeErrorComponente("form_conci:id_tipo", mensaje);
                resultado = false;
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
        return resultado;
    }

    public void limpiarpago() {
        try {
            modificar = false;
            habilitar = false;
            ocultar = false;
            identificacion_c = "";
            dsc_cliente = null;
            dsc_especialidad = "";
            dsc_estado = "";
            dsc_plan = "";
            tipo_pago = "";
            monto = null;
            modelo_citas_select = new ModeloCitas();
            modelo_citas_tabla = new ModeloCitas();
            persona_cliente_select = new Persona();
            persona_cliente_tabla = new Persona();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarCliente() {
        try {
            persona_cliente_select = persona_cliente_tabla;
            identificacion_c = persona_cliente_select.getIdentificacion();
            dsc_cliente = persona_cliente_select.getNombre() + " " + persona_cliente_select.getApellido1() + " " + persona_cliente_select.getApellido2();

            cargarCitas();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarCita() {
        try {
            modelo_citas_select = modelo_citas_tabla;
            modificar = true;
            ocultar = true;
            asignarDatosCita();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void asignarDatosCita() {
        try {
            identificacion_c = modelo_citas_select.getIdentificacion_c();
            dsc_cliente = modelo_citas_select.getNombre_cliente();
            dsc_especialidad = modelo_citas_select.getDscEspecialidad();
            dsc_estado = modelo_citas_select.getDscEstado();
            dsc_plan = modelo_citas_select.getDscPlan();
            if (modelo_citas_select.getId_plan_cliente() != null) {
                PlanPago pp = scc.consultarPlanPagoCliente(modelo_citas_select.getId_plan_cliente());
                if (pp != null) {
                    monto = pp.getPago_mensual();
                    habilitar = true;
                } else {
                    habilitar = false;
                }
            }

            if (monto == null || monto.equals(BigDecimal.ZERO)) {
                Pago pago = sa.consultarPagoCitaId(modelo_citas_select.getId_cita());
                if (pago != null) {
                    monto = pago.getMonto();
                }
            }

            Pago pago = sa.consultarPagoCitaId(modelo_citas_select.getId_cita());
            if (pago != null) {
                tipo_pago = pago.getTipo_pago();
                
                if (monto == null || monto.equals(BigDecimal.ZERO)) {
                    monto = pago.getMonto();

                }
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * @return the listado_modelo_citas
     */
    public List<ModeloCitas> getListado_modelo_citas() {
        return listado_modelo_citas;
    }

    /**
     * @param listado_modelo_citas the listado_modelo_citas to set
     */
    public void setListado_modelo_citas(List<ModeloCitas> listado_modelo_citas) {
        this.listado_modelo_citas = listado_modelo_citas;
    }

    /**
     * @return the listado_persona_cliente
     */
    public List<Persona> getListado_persona_cliente() {
        return listado_persona_cliente;
    }

    /**
     * @param listado_persona_cliente the listado_persona_cliente to set
     */
    public void setListado_persona_cliente(List<Persona> listado_persona_cliente) {
        this.listado_persona_cliente = listado_persona_cliente;
    }

    /**
     * @return the modelo_citas_tabla
     */
    public ModeloCitas getModelo_citas_tabla() {
        return modelo_citas_tabla;
    }

    /**
     * @param modelo_citas_tabla the modelo_citas_tabla to set
     */
    public void setModelo_citas_tabla(ModeloCitas modelo_citas_tabla) {
        this.modelo_citas_tabla = modelo_citas_tabla;
    }

    /**
     * @return the modelo_citas_select
     */
    public ModeloCitas getModelo_citas_select() {
        return modelo_citas_select;
    }

    /**
     * @param modelo_citas_select the modelo_citas_select to set
     */
    public void setModelo_citas_select(ModeloCitas modelo_citas_select) {
        this.modelo_citas_select = modelo_citas_select;
    }

    /**
     * @return the identificacion_c
     */
    public String getIdentificacion_c() {
        return identificacion_c;
    }

    /**
     * @param identificacion_c the identificacion_c to set
     */
    public void setIdentificacion_c(String identificacion_c) {
        this.identificacion_c = identificacion_c;
    }

    /**
     * @return the dsc_cliente
     */
    public String getDsc_cliente() {
        return dsc_cliente;
    }

    /**
     * @param dsc_cliente the dsc_cliente to set
     */
    public void setDsc_cliente(String dsc_cliente) {
        this.dsc_cliente = dsc_cliente;
    }

    /**
     * @return the modificar
     */
    public boolean isModificar() {
        return modificar;
    }

    /**
     * @param modificar the modificar to set
     */
    public void setModificar(boolean modificar) {
        this.modificar = modificar;
    }

    /**
     * @return the habilitar
     */
    public boolean isHabilitar() {
        return habilitar;
    }

    /**
     * @param habilitar the habilitar to set
     */
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }

    /**
     * @return the persona_cliente_tabla
     */
    public Persona getPersona_cliente_tabla() {
        return persona_cliente_tabla;
    }

    /**
     * @param persona_cliente_tabla the persona_cliente_tabla to set
     */
    public void setPersona_cliente_tabla(Persona persona_cliente_tabla) {
        this.persona_cliente_tabla = persona_cliente_tabla;
    }

    /**
     * @return the persona_cliente_select
     */
    public Persona getPersona_cliente_select() {
        return persona_cliente_select;
    }

    /**
     * @param persona_cliente_select the persona_cliente_select to set
     */
    public void setPersona_cliente_select(Persona persona_cliente_select) {
        this.persona_cliente_select = persona_cliente_select;
    }

    /**
     * @return the ocultar
     */
    public boolean isOcultar() {
        return ocultar;
    }

    /**
     * @param ocultar the ocultar to set
     */
    public void setOcultar(boolean ocultar) {
        this.ocultar = ocultar;
    }

    /**
     * @return the dsc_estado
     */
    public String getDsc_estado() {
        return dsc_estado;
    }

    /**
     * @param dsc_estado the dsc_estado to set
     */
    public void setDsc_estado(String dsc_estado) {
        this.dsc_estado = dsc_estado;
    }

    /**
     * @return the dsc_plan
     */
    public String getDsc_plan() {
        return dsc_plan;
    }

    /**
     * @param dsc_plan the dsc_plan to set
     */
    public void setDsc_plan(String dsc_plan) {
        this.dsc_plan = dsc_plan;
    }

    /**
     * @return the dsc_especialidad
     */
    public String getDsc_especialidad() {
        return dsc_especialidad;
    }

    /**
     * @param dsc_especialidad the dsc_especialidad to set
     */
    public void setDsc_especialidad(String dsc_especialidad) {
        this.dsc_especialidad = dsc_especialidad;
    }

    /**
     * @return the monto
     */
    public BigDecimal getMonto() {
        return monto;
    }

    /**
     * @param monto the monto to set
     */
    public void setMonto(BigDecimal monto) {
        this.monto = monto;
    }

    /**
     * @return the tipo_pago
     */
    public String getTipo_pago() {
        return tipo_pago;
    }

    /**
     * @param tipo_pago the tipo_pago to set
     */
    public void setTipo_pago(String tipo_pago) {
        this.tipo_pago = tipo_pago;
    }
}
